package com.example.kotlinstudy.s1

import com.example.kotlinstudy.User
import org.junit.Test

import java.util.HashMap

/**
 * Example local unit test, which will execute on the development machine (host).
 *
 * See [testing documentation](http://d.android.com/tools/testing).
 */
class Test_in_as_foreach {
    @Test
    fun addition_isCorrect() {

        //rang表达试使用  ----------------------------------------------------------------------------------------
        var num: IntRange = 1..100  //区间(1到100包含100)
        var cout = 0
        for (i in num) {
            cout += i
        }
//        print("$cout")

        var num2 = 1 until 100 //1到99

        val reversed = num2.reversed()//反转
        for (reversed in reversed) {
//            println(reversed)
        }


        //list使用  取值----------------------------------------------------------------------------------------
        val listOf = listOf("鸡蛋", "大米", "油")  //实例化时，直接赋值
        for (s in listOf) { //直接取出里面的值
//            println(s)
        }

        listOf.forEach {//直接取出里面的值
//            println(it)
        }

        for (s in listOf.indices) {//indices  取下标
//           println(listOf[s])
        }
        for ((s, v) in listOf.withIndex()) {//indices 同时取下标和值
//           println("$s   $v")
        }


        val mutableListOf1 = mutableListOf(1, 2, 3, 4)
        mutableListOf1.removeIf { it == 1 }
//在这里使用不可变的强转过来删除会报错
        println("删除list中数据 ${mutableListOf1.toString()}")
        /**
         * java里的arraylist
         */
        var list: ArrayList<String> = arrayListOf<String>()//先实例化对象，后赋值
        list.add("a")
        list.add("b")
        list.add("c")
        for (s in list) {
//            println(s)
        }

        val arrayList = ArrayList<User>() //java中new的写法
        arrayList.add(User("lzj"))
        arrayList.add(User("wqw"))


        /**
         * kotlin里面的list
         */
        val mutableListOf: MutableList<Int> = mutableListOf<Int>()
        mutableListOf.add(1)
        mutableListOf.add(2)
        mutableListOf.add(3)
        for (i in mutableListOf) {
            println(i)
        }

        //is的使用 instandof
        if (list is List<*>) {
            println("测试： list is List ")
        } else println("测试： list not is List ")


        if (mutableListOf is List<*>) {
            println("测试： mutableListOf is List ${mutableListOf[0]}")
        } else println("测试： mutableListOf not is List ")

        isMethodCheck(null) //方法里面加问号，这里可以传null
//        isMethodCheck(arrayList) //方法里面加问号，这里可以传null


        //map使用  取值----------------------------------------------------------------------------------------
        val hashMapOf: HashMap<String, Any> =
            hashMapOf<String, Any>("name" to "ljz", "age" to 120) //这个hashmap是java里面的hashmap
        hashMapOf["sex"] = "男"
        for (mutableEntry in hashMapOf) {
//            println("${mutableEntry.key}  ${mutableEntry.value}")
        }


        for (key in hashMapOf.keys) {//单个打印
//            println("$key")
        }


        val stringMap: HashMap<String, String> = hashMapOf<String, String>() //kotlin中的map
        stringMap["name"] = "Java"
        stringMap.put("city", "海口")
        stringMap.put("department", "研发部")
        stringMap.put("hobby", "专业撸码二级")

        var hashMapOf1 = hashMapOf(Pair("name", "lzj"), Pair("age", "35"))

        val hashMap = HashMap<String, Any>()//也可以直接使用java中new的方式

        println(stringMap.containsKey("name"))

    }

    private fun isMethodCheck(a: Any?) {
        /**
         * 如果不是集合类型都可以直接写上具体的类型
         */
//        if (a is List<*>) {   //is前后不能加问号
//            val arrayList = a as List<User>
//            println("a is List 类型   名字=${arrayList[0].name}")
//        }else println("a is not List 类型")

        //第二种写法 直接转
        val list = a as? List<User>     //如果a传null过来的话，as不加问号会报错
//        println("a is List 类型   名字=${list?.get(0)?.name}") //如果as加了问号， 这里都要强制加问号

        list?.apply {    //放在这个里面，如果加了问号，后面的就不用加
            println("a is List 类型   名字=${get(0).name}")
        }


    }
}
